package com.example.xlsx;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 向d://test.xls中追加内容，（前提是：必须已经存在字段列头，可以没有内容）
 *
 * 如果是xls，使用HSSFWorkbook；如果是xlsx，使用 XSSFWorkbook
 * @author
 *
 */
public class ImportExcel{

    public static void main(String[] args) throws Exception {
        FileInputStream fs=new FileInputStream("D:/study/code/chuangzhixinghandocument/wps/1628411152981info.xlsx");  //获取d://test.xls
        //如果是xls，使用HSSFWorkbook；如果是xlsx，使用 XSSFWorkbook

        File file = new File("D:/study/code/chuangzhixinghandocument/wps/1628411152981info.xlsx");

        if(file.length() == 0) {
            System.out.println("文件为空！");

        }
        //xlsx
        XSSFWorkbook wb = new XSSFWorkbook(fs);
        XSSFSheet sheet=wb.getSheetAt(0);  //获取到工作表，因为一个excel可能有多个工作表
        XSSFRow row=sheet.getRow(0);  //获取第一行（excel中的行默认从0开始，所以这就是为什么，一个excel必须有字段列头），即，字段列头，便于赋值

        //xls
//        POIFSFileSystem ps=new POIFSFileSystem(fs);  //使用POI提供的方法得到excel的信息
//        HSSFWorkbook wb=new HSSFWorkbook(ps);
//        HSSFSheet sheet=wb.getSheetAt(0);  //获取到工作表，因为一个excel可能有多个工作表
//        HSSFRow row=sheet.getRow(0);  //获取第一行（excel中的行默认从0开始，所以这就是为什么，一个excel必须有字段列头），即，字段列头，便于赋值
//        System.out.println(sheet.getLastRowNum()+" "+row.getLastCellNum());  //分别得到最后一行的行号，和一条记录的最后一个单元格


        FileOutputStream out=new FileOutputStream("D:/study/code/chuangzhixinghandocument/wps/1628411152981info.xlsx");  //向d://test.xls中写数据

        Long a4 = System.currentTimeMillis();
        for (int i = 1; i <1 ; i++) {
        row=sheet.createRow((short)(sheet.getLastRowNum()+i)); //在现有行号后追加数据

            //T0000000001
            row.createCell(0).setCellValue("T"+i); //设置第一个（从0开始）单元格的数据
            row.createCell(1).setCellValue("in"); //设置第二个（从0开始）单元格的数据
            row.createCell(2).setCellValue(i+","+i+","+i); //设置第3个（从0开始）单元格的数据
            row.createCell(3).setCellValue("B"+i); //设置第4个（从0开始）单元格的数据
            row.createCell(4).setCellValue("B"); //设置第5个（从0开始）单元格的数据
            row.createCell(5).setCellValue("Bk-C"); //设置第5个（从0开始）单元格的数据
            row.createCell(6).setCellValue("B"); //设置第5个（从0开始）单元格的数据

            row.createCell(7).setCellValue( new Date()); //设置第6个（从0开始）单元格的数据
            row.createCell(8).setCellValue( 0); //设置第7个（从0开始）单元格的数据
            row.createCell(9).setCellValue("A"+i); //设置第8个（从0开始）单元格的数据
            row.createCell(10).setCellValue(1); //设置第9个（从0开始）单元格的数据
            row.createCell(11).setCellValue(0); //设置第10个（从0开始）单元格的数据
            row.createCell(12).setCellValue( new Date()); //设置第11个（从0开始）单元格的数据
            row.createCell(13).setCellValue( new Date()); //设置第12个（从0开始）单元格的数据
            row.createCell(14).setCellValue( new Date()); //设置第13个（从0开始）单元格的数据
            row.createCell(15).setCellValue(""); //设置第14个（从0开始）单元格的数据
            row.createCell(16).setCellValue(11); //设置第15个（从0开始）单元格的数据

        }
        Long a5 = System.currentTimeMillis();



        out.flush();
        wb.write(out);
        out.close();
        System.out.println(row.getPhysicalNumberOfCells()+" "+row.getLastCellNum()+" 用时"+(a5-a4));
    }
}
